package com.example.dao;

import com.example.pojo.dto.PageDTO;
import com.example.pojo.dto.SaveProductAllotApplyDTO;
import com.example.pojo.dto.UpdateProductAllotApplyDTO;
import com.example.pojo.orm.ProductAllotApply;

import java.util.List;

/**
 * @author 季鑫利
 * @description 商品调拨申请dao
 */
public interface ProductAllotApplyDao {

    /**
     * 新增调拨申请单
     *
     * @param saveProductAllotApplyDTO 调拨申请单信息
     * @return 影响行数
     * @author 季鑫利
     */
    int saveProductAllotApply(SaveProductAllotApplyDTO saveProductAllotApplyDTO);

    /**
     * 根据调拨申请单id删除申请单
     *
     * @param id 调拨申请单id
     * @return 影响行数
     * @author 季鑫利
     */
    int removeProductAllotApply(Integer id);

    /**
     * 更新调拨单
     *
     * @param updateProductAllotApplyDTO 更新调拨单信息参数
     * @return 影响行数
     * @author 季鑫利
     */
    int updateProductAllotApply(UpdateProductAllotApplyDTO updateProductAllotApplyDTO);

    /**
     * 查询所有调拨申请单
     *
     * @param pageDTO 分页参数
     * @return 所有调拨申请单
     * @author 季鑫利
     */
    List<ProductAllotApply> queryProductAllotApply(PageDTO pageDTO);

    /**
     * 查询总记录数
     *
     * @return 影响行数
     * @author 季鑫利
     */
    int count();

    /**
     * 根据商品类别id查询
     *
     * @param typeId 商品类别id
     * @return 调拨申请单信息
     * @author 季鑫利
     */
    List<ProductAllotApply> queryProductAllotApplyByTypeId(Integer typeId);

    /**
     * 调货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    List<ProductAllotApply> queryAllotsTopTen();

    /**
     * 断货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    List<ProductAllotApply> querySupplyShortageTopTen();

    /**
     * 柜台调货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    List<ProductAllotApply> queryCountersNumberTopTen();

    /**
     * 根据申请单id查询
     *
     * @param id 申请单id
     * @return 申请单信息
     * @author 季鑫利
     */
    ProductAllotApply queryProductAllotApplyById(Integer id);
}
